Back to Blog

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’

林小卫很行

前两天,想着快到我女儿的 3 岁生日了。

因为最近这段时间,我正沉浸式地使用 AI,便想着:能不能用 AI 给她制作一个特别的生日礼物?

她平常很喜欢看动画片,《小猪佩奇》和《宝贝赳赳》是她的最爱。所以我希望能把这两个动画角色融入进来,特别是小猪佩奇。最好能把猪爸爸、猪妈妈、乔治和赳赳一起放进画面里。

最开始,我想制作一个视频,在她生日当天播放。

但跟 AI 聊过之后,发现这个难度挺大。

一个难题是,很难确保动画形象的一致性;另一个问题是,目前各个平台基本上只能生成 5s 左右的视频。如果想制作一个几分钟的完整视频,需要生成很多个零碎片段,再费时费力地剪辑到一起。

权衡之后,我决定制作一个在线网页作为礼物。

我希望在这个网页的互动过程中,可以融入我女儿的 3D 形象。我找了一张她戴墨镜的照片作为素材——这样生成的 3D 形象既保留了她的神韵,又可以在一定程度上保护隐私。

这份礼物,我是希望能让她亲手操作和互动的。到时候,应该会给她平板让她自己玩耍,所以网站需要做好 Responsive(响应式)适配。

另外,我不希望这个网站的玩法是简单的“一次通关”,而是可以反复体验。哪怕其中某个章节——比如刚刚开始的部分——是专门庆祝生日的,后续的内容也可以让她持续玩下去。

在动手制作的过程中,我碰到的第一个问题就是:怎么生成她的 3D 形象,然后让这个 3D 形象动起来?

创建 3D 模型

跟 AI 聊完之后,我梳理出了大致的流程:

首先,用真人照片生成卡通风格的图片;然后,以此图片为基础生成 3D 模型;最后,将各个动作添加到 3D 模型中。

在前两步,我一开始尝试了 Lovart。后来因为 Lovart 每天赠送的一百积分用完了,我就切换到了其他几个工具(Gemini 网页版 + Tripo3d.ai),把它们结合起来使用,最终得到了满意的 3D 模型。


具体的尝试过程,其实经过了好几个波折。我把中间的探索展示给大家看看。

我先在 Lovart.ai 上传了一张她的真实照片,指令是让 AI 帮我把它转成一张“睁着眼、呈现 A-pose”的图片。

在 Lovart 里,可以先生成图片,然后直接转成 3D 模型。它其实是调用了两个不同的大模型来完成这两个步骤:

  • Nano Banana Pro:负责将真人图片转成卡通风格的图片
  • Tripo:负责将图片里的人物转成 3D 模型

第一次尝试

生成的图片看起来确实挺可爱的。

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 配图 1

但是,转出来的 3D 模型就有点让人一言难尽了。

first-3d.gif

第二次尝试

这一次,我调整了策略,生成另外一张图片。要求嘴巴不要张开,最重要的是,衣服上、帽子上面的那个图案不要有。第一次尝试里那个后脑勺的图案,看着确实有点吓人。

second-pic.png

再次生成 3D 模型,看起来正常多了。不过脸上那个腮红还是略显突兀,像留了道疤痕似的。

second-3d.gif

第三次尝试

有了前面的经验,这次只需要把脸上那个腮红去掉就行,其他的部位、姿势都已经探索得差不多了。

因为尝试了多次,Lovart 里的积分也耗尽了。所以这一次,我是在 Gemini 的网页版里,使用 Nano Banana Pro 来生成图片的。

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 配图 5

同理,因为积分用完了,我就去了 Tripo 的官网生成 3D 模型。从效果上看,这一次基本上可以直接拿来用了。

Tripo 官网第一次注册会送三百个积分,每次生成一个 3D 模型大概需要三十五积分。而且 Tripo 在导出的时候可以选择多种格式,而在 Lovart 上使用 Tripo 的话只能导出为 glb 格式。

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 6

将动作添加到 3D 模型

这里用到的工具是 Mixamo.com

Mixamo 是 Adobe 旗下的一个免费网站。我们可以上传自己的 3D 模型,然后为它指定相关的动作。不过要注意,它只支持上传 FBX 格式的文件,导出的也是 FBX 格式。

所以,我们需要先在 Tripo 上将模型导出成 FBX 格式,再上传到 Mixamo。

举个例子,我们需要给小人准备几个基础动作:一个静止状态的动画(Idle),一个跑步的动画(Run),一个跳跃的动画(Jump),还有一个是结束时的 Wave 或者 Dance 动画。

下面这些,就是我通过这个 3D 模型制作出来的动作效果。

静止待机动画(Idle)

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 7

跑步动画(Run)

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 8

跳跃动画(Jump)

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 9

跳舞动画(Dance)

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 10

将动画合成到一个 3D 模型

这里需要用到一个新的软件:Blender。这是一个开源、免费的软件。

最开始,我跟 AI 聊下来的方案是:把所有的动作都 Copy 一份,然后复制到第一个导出来的静止动画模型上。但是后来尝试了几种方案,都没能成功。

最后,我其实只是用 Blender 把 FBX 格式转换成了 GLB 格式,然后在代码层面上,把各个动作“写”到了那个静止模型的小人身上。

下面是在 Local(本地)跑起来后的整体效果:

女儿 3 岁生日,我花 48 小时给她手搓了一个‘平行世界’ - 截图 11

整个过程,比我预想的要复杂不少。

原本预计在她生日时完成,然后直接交付给她玩。但现在看来,光是折腾这个 3D 模型,就已经花了我大概两天的时间。

后面还有不少工作要做,比如找找其他素材,再通过代码把它们整合进去。

今天先分享 3D 模型这一块是怎么搞定的。后面的部分,我会一步一步完成,然后再一步一步与大家分享。